package br.com.velp.vskygeo.dto;

import br.com.velp.vskygeo.enumerator.StatusMonitoramentoEnum;
import br.com.velp.vskygeo.util.DateTimeUtils;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 06.08.2013 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <descricao> DTO Para Representar Os Ultimos Dados 
 *             Lidos e Exibição das Informações No Mapa 
 * </descricao>
 * </sumario>
 */
public class UltimoDadoLidoResultadoConsultaDTO implements InterfaceDTO {
    
    private int idMonitorado;
    private int idCliente;
    private int velocidade;
    private int hodometro;
    private int horimetro;
    private String descricaoMonitorado;
    private String serialEquipamento;
    private short gpsLigado;
    private short tipoTransmissao;
    private short ignicaoLigada;
    private short wifiConectado;
    private short tipoEquipamento;
    private short statusMonitorado;
    private double latitude;
    private double longitude;
    private Date horaUltimaPosicao;
    private Date horaUltimaTransmissaoWifi;

    public int getIdMonitorado() {
        return idMonitorado;
    }

    public void setIdMonitorado(int idMonitorado) {
        this.idMonitorado = idMonitorado;
    }

    public int getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(int idCliente) {
        this.idCliente = idCliente;
    }

    public int getHodometro() {
        return hodometro;
    }

    public void setHodometro(int hodometro) {
        this.hodometro = hodometro;
    }

    public int getHorimetro() {
        return horimetro;
    }

    public void setHorimetro(int horimetro) {
        this.horimetro = horimetro;
    }

    public int getVelocidade() {
        return velocidade;
    }

    public void setVelocidade(int velocidade) {
        this.velocidade = velocidade;
    }

    public String getDescricaoMonitorado() {
        return descricaoMonitorado;
    }

    public void setDescricaoMonitorado(String descricaoMonitorado) {
        this.descricaoMonitorado = descricaoMonitorado;
    }

    public String getSerialEquipamento() {
        return serialEquipamento;
    }

    public void setSerialEquipamento(String serialEquipamento) {
        this.serialEquipamento = serialEquipamento;
    }

    public short getGpsLigado() {
        return gpsLigado;
    }

    public void setGpsLigado(short gpsLigado) {
        this.gpsLigado = gpsLigado;
    }

    public short getIgnicaoLigada() {
        return ignicaoLigada;
    }

    public void setIgnicaoLigada(short ignicaoLigada) {
        this.ignicaoLigada = ignicaoLigada;
    }

    public short getWifiConectado() {
        return wifiConectado;
    }

    public void setWifiConectado(short wifiConectado) {
        this.wifiConectado = wifiConectado;
    }

    public short getTipoTransmissao() {
        return tipoTransmissao;
    }

    public void setTipoTransmissao(short tipoTransmissao) {
        this.tipoTransmissao = tipoTransmissao;
    }

    public short getStatusMonitorado() {
        return statusMonitorado;
    }

    public void setStatusMonitorado(Short statusMonitorado) {
        if (statusMonitorado == null) {
            statusMonitorado = StatusMonitoramentoEnum.LIVRE.getValue();
        }
        this.statusMonitorado = statusMonitorado;
    }

    public short getTipoEquipamento() {
        return tipoEquipamento;
    }

    public void setTipoEquipamento(short tipoEquipamento) {
        this.tipoEquipamento = tipoEquipamento;
    }

    public double getLatitude() {
        return latitude;
    }

    public String getLatitudeStr() {
        DecimalFormat df = new DecimalFormat("#,##0.000000", new DecimalFormatSymbols(Locale.ENGLISH));
        return df.format(latitude);
    }

    public void setLatitude(double latitude) {
        this.latitude = latitude;
    }

    public double getLongitude() {
        return longitude;
    }

    public String getLongitudeStr() {
        DecimalFormat df = new DecimalFormat("#,##0.000000", new DecimalFormatSymbols(Locale.ENGLISH));
        return df.format(longitude);
    }

    public void setLongitude(double longitude) {
        this.longitude = longitude;
    }

    public String getHoraUltimaPosicao() {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
        return sdf.format(DateTimeUtils.getDateTimeGmtBrasil(horaUltimaPosicao));
    }
    
    public void setHoraUltimaPosicao(Date horaUltimaPosicao) {
        this.horaUltimaPosicao = horaUltimaPosicao;
    }
    
    public long getTempoTransmissao() {
        Date dataHoraAtual = DateTimeUtils.getDateTimeGmtBrasil(new Date());
        Date dataHoraUltTransm = DateTimeUtils.getDateTimeGmtBrasil(this.horaUltimaPosicao);
        return ((dataHoraAtual.getTime() - dataHoraUltTransm.getTime()) / 1000);
    }

    public Date getHoraUltimaTransmissaoWifi() {
        return DateTimeUtils.getDateTimeGmtBrasil(this.horaUltimaTransmissaoWifi);
    }

    public void setHoraUltimaTransmissaoWifi(Date horaUltimaTransmissaoWifi) {
        this.horaUltimaTransmissaoWifi = horaUltimaTransmissaoWifi;
    }

    @Override
    public Map<String, Object> getMapaInformacao() {
        
        Map<String, Object> mapaInformacao = new HashMap<String, Object>();
        
        mapaInformacao.put("idMonitorado", getIdMonitorado());
        mapaInformacao.put("idCliente", getIdCliente());
        mapaInformacao.put("velocidade", getVelocidade());
        mapaInformacao.put("hodometro", getHodometro());
        mapaInformacao.put("horimetro", getHorimetro());
        mapaInformacao.put("descricaoMonitorado", getDescricaoMonitorado());
        mapaInformacao.put("serialEquipamento", getSerialEquipamento());
        mapaInformacao.put("gpsLigado", getGpsLigado());
        mapaInformacao.put("tipoTransmissao", getTipoTransmissao());
        mapaInformacao.put("ignicaoLigada", getIgnicaoLigada());
        mapaInformacao.put("wifiConectado", getWifiConectado());
        mapaInformacao.put("tipoEquipamento", getTipoEquipamento());
        mapaInformacao.put("statusMonitorado", getStatusMonitorado());
        mapaInformacao.put("latitude", getLatitudeStr());
        mapaInformacao.put("longitude", getLongitudeStr());
        mapaInformacao.put("horaUltimaPosicao", getHoraUltimaPosicao());
        mapaInformacao.put("horaUltimaTransmissaoWifi", getHoraUltimaTransmissaoWifi());
        
        return mapaInformacao;
        
    }

    @Override
    public String getTipoInformacao() {
        return "ULTIMO_DADO_LIDO";
    }
    
}
